import streamlit as st
from openai import OpenAI

# 初始化 OpenAI 客户端
client = OpenAI(
    api_key="sk-1afb89de00204c2fb77caad11d48a5cd",
    base_url="https://api.deepseek.com/v1"
)


# 初始化会话状态
#st.session_state 是 Streamlit 中用于管理应用会话状态的核心工具，允许在用户交互过程中持久化存储数据
if "messages" not in st.session_state:
    st.session_state.messages = [
        {"role": "assistant", "content": "你是一个有帮助的 AI 助手"}
    ]

# 页面标题
st.title("DeepSeek 聊天助手")

# 创建容器放置聊天记录和清除按钮
chat_container = st.container()

with chat_container:
    # 显示聊天历史（从第二条消息开始，跳过系统消息）
    for message in st.session_state.messages[0:]:
        #创建一个聊天消息容器，用于显示特定角色（用户 / 助手）的消息
        with st.chat_message(message["role"]):
            st.markdown(message["content"])

    # 在聊天记录下方放置清除按钮
    if len(st.session_state.messages) > 1:  # 只有当有聊天记录时才显示清除按钮
        if st.button("清除聊天历史"):
            st.session_state.messages = [
                {"role": "assistant", "content": "你是一个有帮助的 AI 助手"}
            ]
            st.rerun()  # 重新运行以立即更新界面

# 用户输入（放在最后，这样输入框会在页面底部）
if prompt := st.chat_input("请输入您的问题"):
    # 添加用户消息到历史
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        #允许你使用简单的语法来添加标题
        st.markdown(prompt)


    # 获取 AI 响应
    with st.chat_message("assistant"):
        with st.spinner("思考中..."):
            response = client.chat.completions.create(
                model="deepseek-chat",
                messages=st.session_state.messages
            )
            ai_response = response.choices[0].message.content

            # 添加 AI 响应到历史
            st.session_state.messages.append({"role": "assistant", "content": ai_response})
            st.markdown(ai_response)
            #一定要及时刷新页面，不让历史记录不能及时显现
            st.rerun()  # 添加新消息后刷新界面